#ifndef ENERGYSTORAGE_H
#define ENERGYSTORAGE_H

#include "component.h"

class EnergyStorage : public Component
{
private:
    double capacity;            // 总容量 (kWh)
    double currentEnergy;       // 当前储能 (kWh)
    double maxChargePower;      // 最大充电功率 (kW)
    double maxDischargePower;   // 最大放电功率 (kW)
    double chargeEfficiency;    // 充电效率
    double dischargeEfficiency; // 放电效率
    double selfDischargeRate;   // 自放电率 (%/小时)

public:
    // 构造函数
    EnergyStorage(const QString& name,
                  double cap = 1000.0,
                  double maxCharge = 200.0,
                  double maxDischarge = 200.0,
                  double chargeEff = 0.9,
                  double dischargeEff = 0.9,
                  double selfDischarge = 0.1);

    // 析构函数
    ~EnergyStorage();

    // 充电
    bool charge(double power, double duration);

    // 放电
    bool discharge(double power, double duration);

    // 获取荷电状态 (SOC)
    double getSOC() const;

    // 设置荷电状态
    void setSOC(double soc);

    // 获取总容量
    double getCapacity() const;

    // 设置总容量
    void setCapacity(double cap);

    // 获取当前储能
    double getCurrentEnergy() const;

    // 获取最大充电功率
    double getMaxChargePower() const;

    // 设置最大充电功率
    void setMaxChargePower(double power);

    // 获取最大放电功率
    double getMaxDischargePower() const;

    // 设置最大放电功率
    void setMaxDischargePower(double power);

    // 更新自放电
    void updateSelfDischarge(double duration);

    // 重写基类的设置功率方法
    void setPower(double newPower) override;

    // 重写基类的获取状态方法
    QString getStatus() const override;
};

#endif // ENERGYSTORAGE_H
